cssnode: Catch case where a style didn't change
authorBenjamin Otte <otte@redhat.com>
Sat, 12 Dec 2015 01:09:01 +0000 (02:09 +0100)
committerBenjamin Otte <otte@redhat.com>
Sat, 12 Dec 2015 01:16:04 +0000 (02:16 +0100)
Catch the case where a CSS style did not change and don't emit the
style-changed signal in that case.

This saves not only the emission of the signal, but also doesn't cause
invalidation in child nodes, which would previously get a PARENT_STYLE

gtk/gtkcssnode.c

index 9df217abe821f1e91efebf18f310212e204aa6df..ec89634eb3f3f1a1633b037a06834deeec0c3489 100644 (file)
@@ -950,17 +950,20 @@ gtk_css_node_set_style (GtkCssNode  *cssnode,
                         GtkCssStyle *style)
 {
   GtkCssStyleChange change;
+  gboolean style_changed;
 
   if (cssnode->style == style)
     return FALSE;
 
   gtk_css_style_change_init (&change, cssnode->style, style);
 
-  g_signal_emit (cssnode, cssnode_signals[STYLE_CHANGED], 0, &change);
+  style_changed = gtk_css_style_change_has_change (&change);
+  if (style_changed)
+    g_signal_emit (cssnode, cssnode_signals[STYLE_CHANGED], 0, &change);
 
   gtk_css_style_change_finish (&change);
 
-  return TRUE;
+  return style_changed;
 }
 
 static void